There exist numerous protocols defining rule sets that govern communication between devices. These protocols identify a common language and basic functionality, such as, routing, error detection, error correction, addressing, and the order in which the devices communicate with each other.
One example of such a protocol is the Infrared Data Association (“IRDA”) protocol. The IRDA protocol defines a link protocol for serial infrared links. The IRDA protocol sets forth a common set of rules that devices operate in accordance with to communicate over a wireless air interface using infrared light. The IRDA protocol defines basic functionality such as link initialization, device address discovery, connection start-up, including link negotiation, information exchange, disconnection, link shutdown, and device address conflict resolution.
Operationally, application programs located on two different devices can interact and communicate with one another using an IRDA port and the rules defined by the IRDA protocol. The application programs contain functions for particular application services, such as file transfer, remote file access, and virtual terminals. A service access method provides the interface between the IRDA protocol layer and the application program layer. The communications are provided to the service access method by the applications in the application program layer. The data input to the service access method is modulated into infrared signals by an infrared modem and exchanged over the IRDA port with another similarly configured device according to the rule set defined in the IRDA protocol. The receiving device demodulates the data and provides the data to an application program in its own application program layer.
Another type of protocol used in communication between devices is a transmission control protocol/Internet protocol (“TCP/IP”). TCP/IP is a networking protocol that provides communication across interconnected networks between computers with diverse hardware architectures and operating systems. Operationally, TCP/IP messages from an application program layer of one device are divided into smaller segments called packets. The packets each include a sequence number that indicates the order of the segment within the message. The destination device receives and checks the packets for error conditions. If no error condition exists, the packets are routed to the application layer and the receiving protocol layer provides an acknowledgment message to the sending protocol layer confirming the packet receipt.
Unfortunately, prior art protocols such as the IRDA and TCP/IP protocol do not provide flexibility in the exchange rate for communications between devices. Rather the exchange rate is set by the modulation/demodulation scheme defined by the device hardware. Thus, if the dynamics of the system change, inefficiency in the utilization of system resources could result. For example, if an application program needs to exchange a large communication, and the system is operating at a 20% resource utilization, the application program cannot utilize the available resources to transfer the communication at a faster exchange rate, but rather, is limited to the exchange rate defined in the device hardware, while the remaining 80% of the resources remain idle.
Another problem with prior art protocols is that the acknowledgment message is received by the sending protocol layer and not the sending application program. The sending application program does not have knowledge that a communication was received. Thus, if the sending protocol layer does not receive the acknowledgment message, the application program does not have knowledge of the condition until a time-out error condition occurs. This results in synchronization errors as application programs in one device continue to send information to another device without knowledge of an error condition until a time-out error occurs.